package com.avalieme.gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.text.DecimalFormat;
import java.util.List;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

import twitter4j.Tweet;

import com.avalieme.logica.AvalieMe;


public class MainSwing extends JFrame implements ActionListener {
	
	private static final long serialVersionUID = 1019282888654069357L;
	
	private JButton botaoBuscar;
	private JTextField hashtag;
	private ImagePanel background;
	private Point ponto = new Point(10, 10);
	private AvalieMe av;
	public static final ImageIcon TELA_INICIAL = criaImagem("img/telaInicial.jpg");
	public static final ImageIcon TELA_RESULTADO = criaImagem("img/telaResultado.jpg");
	
	public MainSwing() {
		this.montaJanela();
	}

	private void montaJanela() {
		setTitle("Avalie-me :D");
		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
		setResizable(false);
		
		hashtag = new JTextField("");
		hashtag.setSize(195, 30);
		hashtag.setLocation(328, 413);
		add(hashtag);
		
		botaoBuscar = new JButton("Buscar");
		botaoBuscar.setSize(100, 25);
		botaoBuscar.setLocation(423, 464);
		botaoBuscar.setActionCommand("buscar");
		botaoBuscar.addActionListener(this);
		add(botaoBuscar);
		
		background = new ImagePanel(TELA_INICIAL.getImage());
		add(background, BorderLayout.CENTER);
		
		setBounds(new java.awt.Rectangle(0, 0, 800, 600));
		
		setVisible(true);
	}
	
	private static ImageIcon criaImagem(String imagem) {
		try {
			return new ImageIcon(ImageIO.read(new File(imagem)));
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		String comando = e.getActionCommand();
		if(comando.equals("buscar")) {
			if ((!hashtag.getText().startsWith("#"))) {
				JOptionPane.showMessageDialog(this, "Hashtag deve começar com #", "Error", JOptionPane.ERROR_MESSAGE);
			} else {
				hashtag.setVisible(false);
				botaoBuscar.setVisible(false);
				background.setVisible(false);
				background.img = TELA_RESULTADO.getImage();
				background.repaint();
				background.setVisible(true);
				avaliar();
				add(background);
			}
		}
	}
	
	private void avaliar() {
		av = new AvalieMe(hashtag.getText());
		List<Tweet> opinativos = av.avaliar();
		
		JLabel resultados = new JLabel();
		resultados.setText("TWEETS POSITIVOS");
		resultados.setBounds(ponto.x, ponto.y, 650, 50);
		resultados.setFont(new Font("arial", Font.BOLD, 15));
		resultados.setForeground(Color.DARK_GRAY);
		ponto.y = ponto.y+30;

		add(resultados);
		
		for(Tweet t : av.getPositivos()) {
			resultados = new JLabel();
			resultados.setText(t.getText());
			resultados.setBounds(ponto.x, ponto.y, 850, 50);
			resultados.setFont(new Font("arial", Font.BOLD, 10));
			resultados.setForeground(Color.GRAY);
			ponto.y = ponto.y+15;
			add(resultados);
		}
		ponto.y+=30;
		resultados = new JLabel();
		resultados.setText("TWEETS NEGATIVOS");
		resultados.setBounds(ponto.x, ponto.y, 650, 50);
		resultados.setFont(new Font("arial", Font.BOLD, 15));
		resultados.setForeground(Color.DARK_GRAY);
		ponto.y = ponto.y+30;
		add(resultados);
		
		for(Tweet t : av.getNegativos()) {
			resultados = new JLabel();
			resultados.setText(t.getText());
			resultados.setBounds(ponto.x, ponto.y, 850, 50);
			resultados.setFont(new Font("arial", Font.BOLD, 10));
			resultados.setForeground(Color.GRAY);
			ponto.y = ponto.y+15;
			add(resultados);
		}
		
		ponto.y = ponto.y+30;
		//adicionarLabel("Total Tweets: "+av.getTotal());
		Integer total = opinativos != null ? opinativos.size() : 0;
		adicionarLabel("Total Opinativos: "+total);
		Double totalPositivos = ((total > 0) ? (av.getPositivos().size()/Double.valueOf(total)) : 0.0);
		Double totalNegativos = ((total > 0) ? (av.getNegativos().size()/Double.valueOf(total)) : 0.0);
		totalPositivos = formataCasasDecimais(totalPositivos*100);
		totalNegativos = formataCasasDecimais(totalNegativos*100);
		adicionarLabel("Porcentagem de Tweets Positivos: "+totalPositivos+"%");
		adicionarLabel("Porcentagem de Tweets Negativos: "+totalNegativos+"%");
		
	}
	
	private Double formataCasasDecimais(Double valor) {
		DecimalFormat formatador = new DecimalFormat("#,###.00");
		String resultStr = formatador.format(valor);
		resultStr = resultStr.replace(',', '.');
		return Double.parseDouble(resultStr);
	}
	
	private void adicionarLabel(String texto) {
		JLabel label = new JLabel();
		label = new JLabel();
		label.setText(texto);
		label.setBounds(ponto.x, ponto.y, 650, 50);
		label.setFont(new Font("arial", Font.BOLD, 15));
		label.setForeground(Color.DARK_GRAY);
		ponto.y = ponto.y+15;
		add(label);
	}

	public static void main(String[] args) {
		MainSwing m = new MainSwing();
	}

	
	class ImagePanel extends JPanel {

		private static final long serialVersionUID = -5342965687609546960L;
		private Image img;

		  public ImagePanel(String img) {
		    this(new ImageIcon(img).getImage());
		  }

		  public ImagePanel(Image img) {
		    this.img = img;
		    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
		    setPreferredSize(size);
		    setMinimumSize(size);
		    setMaximumSize(size);
		    setSize(size);
		    setLayout(null);
		  }

		  public void paintComponent(Graphics g) {
		    g.drawImage(img, 0, 0, null);
		  }

		}
}
